package laxproxy

type (
    // 协议的收发处理
    IProtocolParser interface {
        // 客户端发给服务器处理
        Client2Server(msgBody []byte, userCtx IProxyUserContext) []byte
        // 服务器发给客户端处理
        Server2Client(msgBody []byte, userCtx IProxyUserContext) []byte
    }
    // 空的协议收发
    EmptyProtocolParser struct {}
)
// 客户端发给服务器的hook处理
func (epp *EmptyProtocolParser) Client2Server(msgBody []byte, userCtx IProxyUserContext) []byte {
    return msgBody
}
// 服务器发给客户端的hook处理
func (epp *EmptyProtocolParser) Server2Client(msgBody []byte, userCtx IProxyUserContext) []byte {
    return msgBody
}

// 协议解析 <协议id, 协议解析器>
var globalProtocolParsers = make(map[uint32]*IProtocolParser)

// 注册协议回调
func RegisterProtocolParser(protoId uint32, parser IProtocolParser) {
    globalProtocolParsers[protoId] = &parser
}

// 获取协议回调
func TryGetProtocolParser(protoId uint32) *IProtocolParser {
    if parser, ok := globalProtocolParsers[protoId]; ok {
        return parser
    }
    return nil
}
